#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTextEdit>
#include <QPushButton>
#include <QTabWidget>
#include <QLabel>
#include <QFileSystemWatcher>
#include "tlr.h"
#include "tdlgwave.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow() override;

private:
    Ui::MainWindow *ui;
    enum TUIType {
        uiFrame,   //刷新界面
        uiSerialPort, //串口
    };

    //结构体信息翻页组件
    QTabWidget *m_tabWidget = new QTabWidget(this);
    //串口打开/关闭图片
    QPixmap m_pixmapSerialPortOpen = QPixmap(":/images/serialopen.png");
    QPixmap m_pixmapSerialPortClose = QPixmap(":/images/serialclose.png");
    //无文件提示图片
    QPixmap m_pix_empty_file;
    QLabel *m_lbImgHint = nullptr;
    //自动读取定时器
    QTimer *m_tmAutoRead = nullptr;
    //文件修改监控器
    QFileSystemWatcher m_fileSystemWatcher;
    //文件是否修改指示按钮
    QAction *m_actUpdateFile = nullptr;
    //通讯模式_状态栏文本
    QLabel *m_lbCommType = nullptr;
    //工具_数据示波器
    TDlgWave *m_dlgWave = nullptr;

    void dataToUI(const TUIType &nuitype);
    void dragEnterEvent(QDragEnterEvent *event) override;
    void dropEvent(QDropEvent *event) override;
    void closeEvent(QCloseEvent *event) override;
    bool eventFilter(QObject *obj,QEvent *event) override;

private slots:
    //翻页切换
    void slotTabCurrentChanged(int index);
    //读取按钮点击
    void slotBtnRdClicked();
    //下发按钮点击
    void slotBtnWrClicked();
    //控制按钮点击
    void slotBtnCtlClicked();
    //串口刷新按钮点击
    void slotBtnUpdateSerialPortClicked();
    //串口打开点击
    void slotBtnOpenCloseSerialPortClicked();
    //自动读取
    void slotTmAutoReadTimeOut();
    //自动读取勾选框状态改变
    void slotChkAutoReadStateChanged(int state);
    //指令按钮点击
    void slotCmdButtonClicked();
    //网络配置按钮点击
    void slotActNetConfigTrigger();
    //导入/导出
    void slotActImportTrigger();
    void slotActExportTrigger();
    //文件发生修改
    void slotFileChanged(const QString &path);
    //从文件中更新
    void slotActUpdateFileTriggered();
    //更新通讯提示
    void slotUpdateCommHint(const QString &text,bool needMessageBox);
    //校准流程中需要进行的一系列读取/下发
    void slotCalibRdPara(int sta,int len);
    void slotCalibWrPara(int sta,int len,const QString &type,s64 val);
    //数据示波器按钮点击
    void slotActWaveTrigger();
    //波形页面销毁
    void slotDlgWaveDestroy();

};
#endif // MAINWINDOW_H
